#include "rgb_spi_drv.h"
#include "sys_param.h"
#include "my_gpio.h"


#define SPI_MASTER_GPIO           GPIOC     // 新硬件版本改为 PC15
#define SPI_MASTER_PIN_MOSI       GPIO_PIN_15    // 新硬件版本改为 PC15

#define FIRST_LED_OFF           (0)
#define FIRST_LED_ON            (1)



typedef struct 
{
    uint8_t refresh_cnt;
    uint8_t flicker_flag;
    uint8_t breath_duty;
    uint8_t duty_add_flag;
    uint8_t disp_mode;
    uint8_t disp_sta;
    uint8_t disp_level;
    uint8_t last_disp_level;
    uint8_t disp_color;
     uint8_t last_disp_color;

    /* data */
}RGB_DISPLAY_PARAM_t;

RGB_DISPLAY_PARAM_t rgb_data = {0};



 void ws2812_logic_high(void)
{
   SPI_MASTER_GPIO->PBSC = SPI_MASTER_PIN_MOSI;
}

static void ws2812_logic_low(void)
{
    SPI_MASTER_GPIO->PBC = SPI_MASTER_PIN_MOSI;
}


__inline void spi_delay(int delay_cnt)
{
    int i;
    for(i = 0; i < delay_cnt; i ++){
        __NOP();
    }
}
/***********************************
 *  rgb --一共24个bit（R0~R7, G0~G7, B0~B7），
 *            3个byte 
 *  低电平
 *********************************/
__inline void rgb_one_bit_low(void)
{
    ws2812_logic_high();
    __NOP();
    __NOP();
    __NOP();
    ws2812_logic_low();
    spi_delay(5);
}

/***********************************
 *  rgb --一共24个bit（R0~R7, G0~G7, B0~B7），
 *            3个byte 
 *  高电平
 *********************************/
__inline void rgb_one_bit_high(void)
{
    ws2812_logic_high();
    spi_delay(5);
    ws2812_logic_low();
    spi_delay(5);
}

/***********************************
 *  黑色 一个灯珠，有rgb（3*8 = 24bit）
 *********************************/
__inline void black_color(void)
{
    int i;
    //  --黑色
    for(i = 0; i < 24 ; i++){
        rgb_one_bit_low();
        // ws2812_logic_high();
        // __NOP();
        // __NOP();
        // __NOP();
        // ws2812_logic_low();
        // spi_delay(5);
    }
}
/***********************************
 *  白色 一个灯珠，有rgb（3*8 = 24bit）
 *********************************/
__inline void white_color(void)
{
    int i;
    //  --白色
    for(i = 0; i < 24 ; i++){
        rgb_one_bit_high();
        // ws2812_logic_high();
        // spi_delay(5);
        // ws2812_logic_low();
        // spi_delay(5);
    }
}

/***********************************
 *  白色呼吸闪烁 一个灯珠，有rgb（3*8 = 24bit）
 *  duty: 0~100
 *  对应的灰阶为0~255，
 * 
 *********************************/
__inline void white_color_breath(uint8_t duty)
{
    int i;
    int tmp_duty;
    char tmp;

    // 灰阶 = duty *2.5
    tmp_duty = duty*2;
    tmp_duty += duty/2;

    
    //  -- 绿色8个bit
    for(i = 0; i < 8; i++){
        tmp = (tmp_duty<<i)&0x80;
        if(tmp){
            rgb_one_bit_high();
        }
        else{
           rgb_one_bit_low(); 
        }      
    }
      //  -- 红色8个bit
    for(i = 0; i < 8; i++){
        tmp = (tmp_duty<<i)&0x80;
        if(tmp){
            rgb_one_bit_high();
        }
        else{
           rgb_one_bit_low(); 
        }
        
    }

    //  -- 蓝色8个bit
    for(i = 0; i < 8; i++){
        tmp = (tmp_duty<<i)&0x80;
        if(tmp){
            rgb_one_bit_high();
        }
        else{
           rgb_one_bit_low(); 
        }
        
    }

    // //  红色8bit
    // for(i = 0; i < tmp_duty ; i++){
    //     rgb_one_bit_high();
    // }
    // for(i= tmp_duty; i < 8; i++){
    //     rgb_one_bit_low();
    // }
    // // 蓝色8bit
    // for(i = 0; i < tmp_duty ; i++){
    //     rgb_one_bit_high();
    // }
    // for(i= tmp_duty; i < 8; i++){
    //     rgb_one_bit_low();
    // }
}

/***********************************
 *  红色 一个灯珠，有rgb（3*8 = 24bit）
 *********************************/
__inline void red_color(void)
{
    int i;
// --红色
    for(i = 0; i < 8; i++){
        rgb_one_bit_low();
    }
    for(i = 8; i < 16; i++){
        rgb_one_bit_high();
    }
   for(i = 16; i < 24; i++){
        rgb_one_bit_low();
    }
}

/***********************************
 *  红色 一个灯珠，有rgb（3*8 = 24bit）
 *********************************/
__inline void red_color_breath(uint8_t duty)
{
    int i;
    int tmp_duty;
    char tmp;

    // 灰阶 = duty *2.5
    tmp_duty = duty*2;
    tmp_duty += duty/2;

    //--绿色8bit
    for(i = 0; i < 8; i++){
        rgb_one_bit_low();
    }
    // --红色8bit   
   //  红色8bit
    for(i = 0; i < 8; i++){
        tmp = (tmp_duty<<i)&0x80;
        if(tmp){
            rgb_one_bit_high();
        }
        else{
           rgb_one_bit_low(); 
        }
        
    }
    // ---蓝色8bit    
    for(i = 16; i < 24; i++){
        rgb_one_bit_low();
    }
}
/***********************************
 *  绿色 一个灯珠，有rgb（3*8 = 24bit）
 *********************************/
__inline void green_color(void)
{
    int i;
// --绿色
    for(i = 0; i < 8; i++){
        // ws2812_logic_high();
        // spi_delay(5);
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_high();
    }
    for(i = 8; i < 24; i++){
        // ws2812_logic_high();
        // __NOP();
        // __NOP();
        // __NOP();
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_low();
    }

}

__inline void blue_color(void)
{
    int i;
// --蓝色
    for(i = 0; i < 16; i++){
        // ws2812_logic_high();
        // __NOP();
        // __NOP();
        // __NOP();
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_low();
    }
    for(i = 16; i < 24; i++){
        // ws2812_logic_high();
        // spi_delay(5);
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_high();
    }
}

__inline void purple_color(void)
{
    int i;
// --紫色

    for(i = 0; i < 8; i++){
        // ws2812_logic_high();
        // __NOP();
        // __NOP();
        // __NOP();
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_low();
    }

    for(i = 8; i < 16; i++){
        // ws2812_logic_high();
        // spi_delay(5);
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_high();
    }

    for(i = 16; i < 24; i++){
        // ws2812_logic_high();
        // spi_delay(5);
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_high();
    }
}

__inline void cur_led_on(void)
{
    switch(get_sys_rgb_color()){
        case BLACK_COLOR:{
            black_color();
            break;
        }
        case WHITE_COLOR:{
            white_color();
           break; 
        }
        case RED_COLOR:{
            red_color();
           break; 
        }
        case GREEN_COLOR:{
            green_color();
           break; 
        }
        case BLUE_COLOR:{
            blue_color();
           break; 
        }
        default:{
            purple_color();
           break; 
        }
    }
}

/****************************************************
 * 当前灯珠呼吸闪烁
 * 
 * 
***********************************************/
__inline void cur_led_breath_on(uint8_t breath_duty)
{
    switch(get_sys_rgb_color()){
        case BLACK_COLOR:{
            black_color();
            break;
        }
        case WHITE_COLOR:{
            white_color_breath(breath_duty);
           break; 
        }
        case RED_COLOR:{
            red_color_breath(breath_duty);
           break; 
        }

        default:{
            purple_color();
           break; 
        }
    }
}



__inline void cur_led_off(void)
{
   int i;

    for(i = 0; i < 24 ; i++){
        // ws2812_logic_high();
        // __NOP();
        // __NOP();
        // __NOP();
        // ws2812_logic_low();
        // spi_delay(5);
        rgb_one_bit_low();
    }
}


/********************************
 * 主机——档位灯：
 * 正常模式下的显示
*******************************/
void level_leds_display(uint8_t first_led_on_flag, uint8_t level)
{

    //rgb_index1, 状态指示灯（常亮）
    if(first_led_on_flag){
        cur_led_on();
    }
    else{
        cur_led_off();
    }
    

    //rgb_index2, （档位1,2）------5颗档位灯
    if(level > LEVEL_0){
        cur_led_on();
    }
    else{
        cur_led_off();
    }
    //rgb_index3, （档位3,4）
    if(level > LEVEL_2){
        cur_led_on();
    }
    else{
        cur_led_off();
    }
    //  rgb_index4, （档位5,6）
    if(level > LEVEL_4){
        cur_led_on();
    }
    else{
        cur_led_off();
    }
    // rgb_index5, （档位7,8）
   if(level > LEVEL_6){
        cur_led_on();
    }
    else{
        cur_led_off();
    }
    // rgb_index6, （档位9,10）
   if(level > LEVEL_8){
        cur_led_on();
    }
    else{
        cur_led_off();
    }
}

/********************************
 * 主机——档位灯：
 * 正常模式下的显示
*******************************/
void jy1_ems_level_leds_display(uint8_t first_led_on_flag, uint8_t level)
{
    //rgb_index1, 状态指示灯（常亮/闪烁）
    if(0 == first_led_on_flag){
        cur_led_off();cur_led_off();
        cur_led_off();cur_led_off();
        cur_led_off();cur_led_off();
       return;
    }

    // 需要点亮的灯，----中间几项故意没写break----rgb_data.flicker_flag
    switch (level)
    {
        case LEVEL_0:{
            if(rgb_data.flicker_flag){
                cur_led_on();
            }
            break;
        }
        case LEVEL_6: cur_led_on();
        case LEVEL_5: cur_led_on();
        case LEVEL_4: cur_led_on();
        case LEVEL_3: cur_led_on();
        case LEVEL_2: cur_led_on();
        case LEVEL_1: cur_led_on();
            break;
        default:
            break;
    }
    
    //-需要熄灭的灯 ----中间几项故意没写break-------
    switch (level)
    {
        case LEVEL_0: {
            if(0 == rgb_data.flicker_flag){
                cur_led_off();
            }
        }
        case LEVEL_1: cur_led_off();
        case LEVEL_2: cur_led_off();
        case LEVEL_3: cur_led_off();
        case LEVEL_4: cur_led_off();
        case LEVEL_5: cur_led_off();
            break;
        
        default:
            break;
    }
}
/********************************
 * 主机——档位灯：
 * 正常模式下的显示
*******************************/
void jy1_ems_leds_breath_display(uint8_t first_led_on_flag, uint8_t level)
{
    //rgb_index1, 状态指示灯（常亮/闪烁）
    if(0 == first_led_on_flag){
        cur_led_off(); cur_led_off();
        cur_led_off(); cur_led_off();
        cur_led_off(); cur_led_off();
       return;
    }

    // 需要点亮的灯，----中间几项故意没写break----rgb_data.flicker_flag
    switch (level)
    {
        case LEVEL_0:{ 
            cur_led_breath_on(rgb_data.breath_duty);
            break;
        }
        case LEVEL_6: cur_led_breath_on(rgb_data.breath_duty);
        case LEVEL_5: cur_led_breath_on(rgb_data.breath_duty);
        case LEVEL_4: cur_led_breath_on(rgb_data.breath_duty);
        case LEVEL_3: cur_led_breath_on(rgb_data.breath_duty);
        case LEVEL_2: cur_led_breath_on(rgb_data.breath_duty);
        case LEVEL_1: cur_led_breath_on(rgb_data.breath_duty);
            break;
        default:
            break;
    }
    
    //-需要熄灭的灯 ----中间几项故意没写break-------
    switch (level)
    {
        case LEVEL_0: 
        case LEVEL_1: cur_led_off();
        case LEVEL_2: cur_led_off();
        case LEVEL_3: cur_led_off();
        case LEVEL_4: cur_led_off();
        case LEVEL_5: cur_led_off();
            break;
        
        default:
            break;
    }
}

/********************************
 * 主机——档位灯：
 * 正常模式下的显示, 高周波的灯 的level 和rgb的index相反
 * 
 * level1----index3
 * level2-----index2，index3
 * lev
 * 
 * 
*******************************/
void jy1_hf_level_leds_display(uint8_t first_led_on_flag, uint8_t level)
{

    //rgb_index1, 状态指示灯（常亮/闪烁）
    if(0 == first_led_on_flag){
        cur_led_off();
        cur_led_off();
        cur_led_off();
       return;
    }

    // 需要点亮的灯，----中间几项故意没写break----
    switch (level)
    {
        case LEVEL_0:{
            cur_led_off();
            cur_led_off();

            if(rgb_data.flicker_flag){
                cur_led_on();
            }
            else{
                cur_led_off();
            }
            break;
        }
        case LEVEL_1:{
            cur_led_off();
            cur_led_off();
            cur_led_on();
            break;
        }

        case LEVEL_2:{
            cur_led_off();
            cur_led_on();
            cur_led_on();
            break;
        }

        case LEVEL_3:{
            cur_led_on();
            cur_led_on();
            cur_led_on();
            break;
        }
        default:
            break;
    }
}

/********************************
 * 主机——档位灯：
 * 正常模式下的显示, 高周波的灯 的level 和rgb的index相反
 * 
 * level1----index3
 * level2-----index2，index3
 * lev
 * 
 * 
*******************************/
void jy1_hf_leds_breath_display(uint8_t first_led_on_flag, uint8_t level)
{

    //rgb_index1, 状态指示灯（常亮/闪烁）
    if(0 == first_led_on_flag){
        cur_led_off();
        cur_led_off();
        cur_led_off();
       return;
    }

    // 需要点亮的灯，----中间几项故意没写break----
    switch (level)
    {
        case LEVEL_0:{
            cur_led_off();
            cur_led_off();
            cur_led_breath_on(rgb_data.breath_duty);
            break;
        }
        case LEVEL_1:{
            cur_led_off();
            cur_led_off();
            cur_led_breath_on(rgb_data.breath_duty);
            break;
        }

        case LEVEL_2:{
            cur_led_off();
            cur_led_breath_on(rgb_data.breath_duty);
            cur_led_breath_on(rgb_data.breath_duty);
            break;
        }

        case LEVEL_3:{
            cur_led_breath_on(rgb_data.breath_duty);
            cur_led_breath_on(rgb_data.breath_duty);
            cur_led_breath_on(rgb_data.breath_duty);
            break;
        }
        default:
            break;
    }
}


/**************************************************************
 * 主机——模式灯：
 * // --------------模式灯
//  *  rgb_index7,rgb_index8, （模式1）
//  *  rgb_index9,rgb_index10, （模式2）
//  *  rgb_index11,rgb_index12, （模式3）
//  *  rgb_index13,rgb_index14, （模式4）
 * 正常模式下的显示
*************************************************************/
void mode_leds_display(void)
{
    WORK_MODE_e state;

    state = get_sys_mode();
    switch(state){
        case FACE_MODE:{
            cur_led_on();  cur_led_on();
            cur_led_off(); cur_led_off();
            cur_led_off(); cur_led_off(); 
            cur_led_off(); cur_led_off();
            break;
        }
        case BODY_MODE:{
            cur_led_off(); cur_led_off();
            cur_led_on();  cur_led_on();
            cur_led_off(); cur_led_off();
            cur_led_off(); cur_led_off();
            break;
        }
        case HAIR_MODE:{
            cur_led_off();  cur_led_off();
            cur_led_off(); cur_led_off();
            cur_led_on(); cur_led_on();
            cur_led_off(); cur_led_off();
            break;
        }
        case MAX_MODE:{ 
            cur_led_off(); cur_led_off();
            cur_led_off(); cur_led_off(); 
            cur_led_off(); cur_led_off();
            cur_led_on(); cur_led_on();
            break;
        }
        // 老化测试模式----只输出ems
        case TEST_ONLY_EMS_MODE:{
            cur_led_on(); cur_led_on();
            cur_led_on(); cur_led_on();
            cur_led_off(); cur_led_off(); 
            cur_led_off(); cur_led_off();
            break;
        }
        // 老化测试模式----只输出RF
        case TEST_ONLY_RF_MODE:{
            cur_led_on(); cur_led_on();
            cur_led_off(); cur_led_off(); 
            cur_led_on(); cur_led_on();
            cur_led_off(); cur_led_off();
            break;
        }

        default:{
            cur_led_off(); cur_led_off();
            cur_led_off(); cur_led_off();
            cur_led_off(); cur_led_off();
            cur_led_off(); cur_led_off();
            break;
        }
    }
}

/********************************
 * 主机——所有led熄灭：
 * 正常模式下的显示
*******************************/
void close_mode_leds(void)
{
    cur_led_off(); cur_led_off();
    cur_led_off(); cur_led_off();
    cur_led_off(); cur_led_off();
    cur_led_off(); cur_led_off();
}


/********************************
 * 主机——所有led熄灭：
 * 正常模式下的显示
*******************************/
void all_led_off(void)
{
    cur_led_off();cur_led_off();
    cur_led_off();cur_led_off();
    cur_led_off();cur_led_off();
    cur_led_off();cur_led_off();  
    cur_led_off();cur_led_off();
    cur_led_off();cur_led_off();
    cur_led_off();cur_led_off();
    cur_led_off();cur_led_off();  
}

/****************************************************************
 * 主机——提示灯：1颗提示灯、5个档位灯、4颗模式灯[两颗rgb 显示一种模式]
 * 20ms调用一次
 * 
 *  rgb_index1, 状态指示灯（常亮）
 * 
 *  rgb_index2, （档位1,2）
 *  rgb_index3, （档位3,4）
 *  rgb_index4, （档位5,6）
 *  rgb_index5, （档位7,8）
 *  rgb_index6, （档位9,10）
 * 
 *  rgb_index7,rgb_index8, （模式1）
 *  rgb_index9,rgb_index10, （模式2）
 *  rgb_index11,rgb_index12, （模式3）
 *  rgb_index13,rgb_index14, （模式4）
************************************************************************/

void rgb_sip_display_JE3(void)
{
    static uint8_t last_disp_level = 0;
    static uint8_t refresh_delay_cnt = 0;
    LEVEL_e level =0;

    switch(get_sys_state()){
        case SYS_IDLE_STA:
        case NORMAL_WORK_STA:{

        // 如果 模式--档位---颜色都相同，则直接退出，不用再刷新rgb
            if((rgb_data.disp_color == get_sys_rgb_color())&&(rgb_data.disp_mode == get_sys_mode())&&(rgb_data.disp_level == get_sys_level())){
                if(0 == get_sys_level()%2){
                    rgb_data.refresh_cnt = 24;  // 为了切回到奇数档时，立刻刷新
                    rgb_data.flicker_flag = 0;
                    last_disp_level = get_sys_level();
                }
            }
            // 当前档位为奇数时，进行闪烁
            if(get_sys_level()%2){
                rgb_data.refresh_cnt ++;

                if(rgb_data.refresh_cnt%25 == 0){
                    rgb_data.flicker_flag = ~rgb_data.flicker_flag;
                    level = get_sys_level();
                    
                    if(rgb_data.flicker_flag){
                        if(last_disp_level >= level){
                        //-----如果原先档位比现在档位高，即操作了档位-，
                            level --;  
                        }
                        else{
                        //-----如果原先档位没有现在档位高，即操作了档位+，    
                            rgb_data.flicker_flag = 0;
                        }
                    }
                    last_disp_level = get_sys_level(); 
                    rgb_data.refresh_cnt = 0;
                }
                else{
                    return;
                }
            }
            else{
                //rgb_data.flicker_flag = 1;
                rgb_data.refresh_cnt = 24;  // 为了切回到奇数档时，立刻刷新
                level = get_sys_level();
            }
            // ---档位灯
            level_leds_display(FIRST_LED_ON, level);
            // --------------模式灯
            mode_leds_display();
            break;
        }
        /*********************
         *  老化模式： 档位灯正常亮起（同正常模式）
         *            模式灯闪烁  
         * 
        */
        case ALIGN_STA:{

            level = get_sys_level();

            rgb_data.refresh_cnt ++; 
            if(rgb_data.refresh_cnt%25 == 0){
                rgb_data.flicker_flag = ~rgb_data.flicker_flag;
            }
            else{
                return;     // 直接退出，不刷新rgb
            }

            // 当前档位为奇数时，进行闪烁
            if(get_sys_level()%2){
                // 根据闪烁flag，进行闪烁
                if(rgb_data.flicker_flag){  
                    level --;
                }
            }
            // ---档位灯
        
            // --------------模式灯
            if(rgb_data.flicker_flag){
                if(sys_data.aling_run_cnt > ALING_MODE_MAX_OUT_TIME){
                    level_leds_display(FIRST_LED_OFF, level);
                }
                else{
                    level_leds_display(FIRST_LED_ON, level);
                }
                close_mode_leds();
            }
            else{
                level_leds_display(FIRST_LED_ON, level);
                mode_leds_display();
            }
            
            break;
        }
        case ERR_STA:{
            // if(((get_sys_err_mode())& BAT_LOWEST)||((get_sys_err_mode())& BAT_LOW))
            if(rgb_data.disp_sta != ERR_STA){
                rgb_data.refresh_cnt = 0;
            }
            if((get_sys_err_mode())& BAT_LOWEST)
            {       // 电池过低---闪烁提示
                rgb_data.refresh_cnt ++;
                if(rgb_data.refresh_cnt==1){
                    level = get_sys_level();
                    level_leds_display(FIRST_LED_ON, level);
                    mode_leds_display();
                }
                else if(rgb_data.refresh_cnt==25){
                    all_led_off();
                }
                if(rgb_data.refresh_cnt > 50){
                    rgb_data.refresh_cnt = 0;
                }  
            }
            break;
        }

        case CHARGE_STA:
        case CHARGE_FINISH_STA:{
            if(rgb_data.disp_sta != get_sys_state()){
                all_led_off();
            }
            else{
                refresh_delay_cnt ++;   // 2021 10 17 防止接触不良时，显示杂色灯， 定时强制刷新
                if(refresh_delay_cnt % 10 == 0){
                    all_led_off();
                }
            }
            break;
        }

        case SLEEP_STA:{
            if(rgb_data.disp_sta != get_sys_state()){
                all_led_off();
            }
            break;
        }
        default:{
            break;
        }
    }
    rgb_data.disp_sta = get_sys_state();
    rgb_data.disp_color = get_sys_rgb_color();
    rgb_data.disp_mode = get_sys_mode();
    rgb_data.disp_level = get_sys_level();
}


/****************************************************************
 * 处理呼吸显示时的duty 
 * 
 *  
************************************************************************/
void dealwith_led_breath_duty(void)
{
    if(rgb_data.refresh_cnt%2){
        return;
    }

    // 占空比增加/减少，处理
    if(rgb_data.duty_add_flag){
        if(rgb_data.breath_duty < 30){
            rgb_data.breath_duty += 1;   
        }
        else if(rgb_data.breath_duty < 90){
            rgb_data.breath_duty += 3;   
        }
        else{
            rgb_data.duty_add_flag = 0;
        }
    }
    else{
        if(rgb_data.breath_duty > 40){
            rgb_data.breath_duty -= 3;
        }
        else if(rgb_data.breath_duty > 10){
            rgb_data.breath_duty -= 1;
        }
        else{
            rgb_data.duty_add_flag = 1;
        }
    }
}

/****************************************************************
 * 主机——提示灯：      ---------从开关机按键处开始算，第一个灯
 * ems 档位灯6颗 + HF 档位灯 4颗
 *  如果按照灯珠的D1,D2,D3,D4,D5,D6 这样标识档位
 *   
 *  rgb_index1, 状态指示灯（闪烁，档位0）
 *  rgb_index1, 状态指示灯（档位1）
 * 
 *  rgb_index2, （档位2）
 *  rgb_index3, （档位3）
 *  rgb_index4, （档位4）
 *  rgb_index5, （档位5）
 *  rgb_index6, （档位6）
 * 
 * // --------高周波三个灯 ---从开关机按键处 为第一个灯开始算
 *  rgb_index9, （闪烁，档位0）
 *  rgb_index9, （常量，档位1）
 *  rgb_index8, （档位2）
 *  rgb_index7, （档位3）
 *  
 *  
************************************************************************/
static int refresh_delay;

void jy1_rgb_sip_display_A(void)
{

    rgb_data.refresh_cnt ++;
    if(0 == rgb_data.refresh_cnt%25){
        rgb_data.flicker_flag = ~rgb_data.flicker_flag;
        rgb_data.refresh_cnt = 0;
    }
    dealwith_led_breath_duty();

    switch(get_sys_state()){
        case SYS_IDLE_STA:{
            if(sys_data.ems_work_flag){
                jy1_ems_leds_breath_display(1, sys_data.ems_level);
            }
            else{
                jy1_ems_leds_breath_display(0, sys_data.ems_level);
            }
            jy1_hf_leds_breath_display(1, sys_data.hf_level);
            break;
        }
        case NORMAL_WORK_STA:{

            if(sys_data.ems_work_flag){
                jy1_ems_level_leds_display(1, sys_data.ems_level);
            }
            else{
                jy1_ems_level_leds_display(0, sys_data.ems_level);
            }
            jy1_hf_level_leds_display(1, sys_data.hf_level);            
            
            // if(sys_data.ems_work_flag){
            //     jy1_ems_leds_breath_display(1, sys_data.ems_level);
            // }
            // else{
            //     jy1_ems_leds_breath_display(0, sys_data.ems_level);
            // }
            // jy1_hf_leds_breath_display(1, sys_data.hf_level);
            break;
        }

        case CHARGE_STA:{
            if(0 == rgb_data.refresh_cnt){
                rgb_data.disp_level ++;
                if(rgb_data.disp_level > EMS_MAX_LEVEL){
                    rgb_data.disp_level = LEVEL_1;
                }
                jy1_ems_level_leds_display(1, rgb_data.disp_level);
               
                jy1_hf_level_leds_display(0, sys_data.hf_level); 
                 printf("-charge,led[%d]-----\r\n", rgb_data.disp_level);
            }
			//printf("-charge,refresh_cnt[%d]-----\r\n", rgb_data.refresh_cnt);
            break;
        }
        case CHARGE_FINISH_STA:{
            if(0 == rgb_data.refresh_cnt){
                jy1_ems_level_leds_display(1, EMS_MAX_LEVEL);
                jy1_hf_level_leds_display(0, sys_data.hf_level); 
            }
            break;
        }
        default:{

            break;
        }
    }
}

/********
 * 暂时没有用到reset， 测试时发现将reset拉低后，led显示仍然能够保持，所以reset几乎作用
 * 
*/
void rgb_reset(void)
{
    ws2812_logic_low();
}


void my_rgb_init(void)
{
    gpio_output_cfg(SPI_MASTER_GPIO, SPI_MASTER_PIN_MOSI);
}